哈夫曼树-贪心算法的应用实例

本文通过C++实现哈夫曼编码,包括读取文件确认字符权值、构建哈夫曼树、生成哈夫曼字典、文件转码和译码操作。详细介绍了哈夫曼编码的链式结构和贪心算法在其中的应用。
摘要由CSDN通过智能技术生成
/*
*哈夫曼编码-链式结构
* 
*功能实现: 
*	源文件字符权值确认操作 
*	哈夫曼树的建立操作 
*	字符字典的建立操作 
*	源文件转码操作操作 
*	二进制文件译码操作
*	文件输出操作
*	内存清理操作 
*/

#include <stdio.h>
#include <stdlib.h>
#define _HFMAlgorithm_
#define codesize 30

//哈夫曼树结点定义 
typedef struct forest{
	struct forest *left;
	struct forest *right;
	struct forest *parent;
	unsigned int weight;
	char word;
}HFMNode;

//字符字典结点定义 
typedef struct hfmtable{
	char word;
	char code[codesize];
	int start;//标记起始位置 
	struct hfmtable *next;
}Table;

//函数声明
HFMNode * ReadFile(void);
HFMNode * CreateHFMTree(HFMNode *F);
void HFMCode(HFMNode * root,Table * &table);
void PrintHFMTree(HFMNode *root);
void PrintTable(Table *t);
void TransCoding(Table * table);
void ReTransCoding(HFMNode * root);
void SelectFile(void);
void PrintFileInformation(char FileName[]);
void DestroyHFMTree(HFMNode *root);
void DestroyTable(Table *table);

//读取源文件,确认各字符权值建立森林 
HFMNode * ReadFile(void)
{
	HFMNode *head,*p;
	FILE *fp = NULL;
	char a;
	
	//创建表头结点 
	head = (HFMNode *)malloc(sizeof(HFMNode));
	head->left = head->right = head->parent = NULL;
	head->word = '\0';
	head->weight = 0;
	
	//读取源文件,确认权重 
    fp = fopen("input.data","r");
	while( (a = fgetc(fp)) != EOF ){
        for(p = head;p->parent && p->pare
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值